unity学习手册@@huzicpp

您所在的位置:网站首页 unity api中文手册下载 unity学习手册@@huzicpp

unity学习手册@@huzicpp

2023-08-26 21:20| 来源: 网络整理| 查看: 265

文章目录 unity资料unity环境搭建unity必备工具unity背景设计控制人物移动和跳动有关脚本设计的注意Button设计使用编辑器类自定义编辑器

unity资料

注:目录是乱序的,因为是我根据我学习的次序来整理的,所以不太好看。照着目录来找需要的内容吧。 资料参考书下载

unity环境搭建 在官网下载unity版本和hub,下载完成之后用hub激活unity。安装unity的adriod支持包,在file–>build setting 中。安装路径与editor平级即可。在unity的edit中设置jdk,sdk(andrio_studio中的)路径设置好。 unity必备工具 利用骨骼制作人物动作,anima2D,在access商店可以获得。b站教程unity + anima2D制作角色的Idle动作 unity背景设计 切片 暂时不知道切片怎么切,但是不切片的图片不能用摄像头 右击设置摄像头,可以调节摄像头的大小为10,让范围更大。crl+s 必须每次做完更改都要保存。在gameobject选择2dobject 选择tilemap,相当一个场景布置器场景分三层,第一次放背景,如蓝天啊什么的。第二层放bound,边界,角色不能超过的范围。第三层是前景,可能发生交互的地方。需要三个tilemap。分别修改三个tilemap的order in gird,使得重合的地方不会看不到另外一个场景在window选项中选择2D中的tile palette,打开这个窗口。创建一个新的palette,将切好片的图片拖进tile palette,保存。pixels in unit的设置大小要和图片像素一样,防止画图的时候变小。画图,直接用tile palette的图,来绘制场景 控制人物移动和跳动 在主场景中添加人物。把人物的一系列的静止状态图拖入hierachy中,把inspector中添加一个新的排序layer, 把人物放到新的排序中。给人物加主键rigidbody2D,把人物变成刚体,把z轴变成freeze rotation,锁定z轴。给人物加一个碰撞盒box collider 2D,调整范围为我们可以控制的范围(框框)建立碰撞检测机制:tilemap collider 2d,给各个需要的场景加上碰撞检测机制。 建立动画点击player,在window找animation的animation。选择player,点击create,创建一个动画。找到idle下的动画的帧,全部拖到轴上,然后播放,按crl可以选择头和尾,然后方长动画。这个人物其他动画的创建也是相同的道理,新建一个动画,然后播放。控制动画转换:在access(新建的文件夹下)给角色的一些列动画创建一个组,方便后期管理。点击方框图标的player。关闭exit time和fixed。。会变得比较流畅。转换动画在parameter,用值来表示。然后在箭头设置的condition添加控制。写脚本来控制值,创建一个文件夹,命名为scripts。新建一个player脚本,然后像添加刚体属性那样把脚本绑定到player上。脚本编辑,创建一些参数变量,设置为public,可以在外部编辑。在以private声明刚体变量和动画控制器。在update中编写动作变量。用三维的向量来表示,因为本质上还是一个3d软件。

人物移动的脚本完整代码(增加一个摄像头跟随,添加主摄像头即可):

using System.Collections; using System.Collections.Generic; using UnityEngine; public class judgeRun : MonoBehaviour { public float runSpeed = 7; private Animator animator; private Rigidbody2D _rigidbody2D; private float moveX, moveY; public Camera myCamera; private Vector3 offset; // Start is called before the first frame update void Start() { _rigidbody2D = GetComponent(); animator = GetComponent(); offset = _rigidbody2D.transform.position; } // Update is called once per frame void Update() { moveX = Input.GetAxis("Horizontal"); moveY = Input.GetAxis("Vertical"); Run(); if(moveX > 0) { _rigidbody2D.transform.eulerAngles = new Vector3(0f, 0f, 0f); animator.SetBool(name: "isRun", value: true); } if (moveX animator.SetBool(name: "isRun", value: false); } } void Run() { Vector3 move = new Vector3(moveX, moveY, 0f); _rigidbody2D.transform.position += move * runSpeed * Time.deltaTime; } private void LateUpdate() //不会人物不动了但是摄像头还在动 { myCamera.transform.position += _rigidbody2D.transform.position - offset; offset = _rigidbody2D.transform.position; } }

人物的跳跃只需要用脚本来实现。首先实现一个基本的跳跃:

using System.Collections; using System.Collections.Generic; using UnityEngine; public class Jump : MonoBehaviour { // Start is called before the first frame update public float jumpHigh = 5f; private Rigidbody2D _rigidbody2D; private bool jumpJudge = false; public Camera myCamera; private Vector3 offset; void Start() { _rigidbody2D = GetComponent(); } // Update is called once per frame void Update() { if (Input.GetButtonDown("Jump")) { jumpJudge = true; } } private void FixedUpdate() { if (jumpJudge) { _rigidbody2D.AddForce(Vector2.up * jumpHigh, ForceMode2D.Force); //叠加的方式来跳 jumpJudge = false; } } }

注意box collider2d可能会在游戏边界上卡住,所以换成capsule collider会比较好 跳跃触地检测 添加一个触地检测盒,自建的盒子,创建一个脚本jumpbox,代码如下:

有关脚本设计的注意 声明为public的变量不用直接初始化,可以通过图形化界面来导入这些变量。声明为static的变量可以全局访问,实例化只有一次。脚本实际上就是对变量属性的操作,方法的调用。需要知道方法,要记住方法。 Button设计

打开unity3d项目“GameObject” → \rightarrow →“UI” → \rightarrow →“Button”,创建一个按钮。

在“Rect Transform”下可以改变按钮的布局位置大小等。

在“Image (Script)”与“Button(Script)”中可以更详细的设置按钮的颜色等效果。

展开Button在其中的“Text”中的“Text(Script)”中可以设置按钮显示文字信息。

新建一个文件夹“Script”在里面新建一个“Button_test”的脚本,打开后在里面添加一个方法

public void Click_test(){ Debug.Log("点击测试"); }

把编辑好的“Button_test”脚本添加到场景中的Button上。

点击“On Click ()”下的“+”添加,然后Object中选择添加“Button”。(有两个选择,一个是asset,一个是sence,button应该在sence中)

点击“No Function”选择“Button_test”–“Click_test ()”,保存后运行,点击按钮旧可以调用脚本中我们定义的Click_test ()方法,输出“点击测试”。

方法参考于百度,官方文档套娃严重太麻烦了。

使用编辑器类自定义编辑器

文件结构:Editor → \rightarrow → 脚本名 实例:

using System.Collections; using System.Collections.Generic; using UnityEngine; using UnityEditor; //需要加上,因为要使用到那个类 public class first : ScriptableWizard //改为ScriptableWizard { [MenuItem("MyNewname/Batch Rename...")] //菜单显示方式 static void CreateWizard() //创建菜单项 { ScriptableWizard.DisplayWizard("Batch Rename", typeof(first), "wo"); //第三个方法是按钮名 } }

显示选中的场景中的对象数量

using System.Collections; using System.Collections.Generic; using UnityEngine; using UnityEditor; //需要加上,因为要使用到那个类 public class first : ScriptableWizard //改为ScriptableWizard { private void OnEnable() //继承自ScriptableWizard,当工具窗口第一次出现时被调用,也就是单击batch rename时调用 { UpdateSelectionHelper(); } private void OnSelectionChange() //当场景中选择发生改变时被调用(实时显示数量) { UpdateSelectionHelper(); } void UpdateSelectionHelper() //使用helpstring显示选中对象个数信息 { helpString = ""; if(Selection.objects != null) { helpString = "number of objects selected:" + Selection.objects.Length; } } }

设置窗口,用户输入框

public class first : ScriptableWizard //改为ScriptableWizard { //名称前缀 public string Basename = "Myobject_"; //起始号码 public int Startnumber = 0; //递增值 public int Increment = 1; [MenuItem("MyNewname/Batch Rename...")] //菜单显示方式 static void CreateWizard() //创建菜单项 { ScriptableWizard.DisplayWizard("Batch Rename", typeof(first), "renname"); //第三个方法是按钮名 } }

注,不是public属性都可以被识别显示,必须是课串行化的,可以加Serializable来实现串行化

批量修改对象名完整代码

using System.Collections; using System.Collections.Generic; using UnityEngine; using UnityEditor; //需要加上,因为要使用到那个类 using UnityEngine.EventSystems; using System; public class first : ScriptableWizard //改为ScriptableWizard { //名称前缀 public string Basename = "Myobject_"; //起始号码 public int Startnumber = 0; //递增值 public int Increment = 1; [MenuItem("MyNewname/Batch Rename...")] //菜单显示方式 static void CreateWizard() //创建菜单项 { ScriptableWizard.DisplayWizard("Batch Rename", typeof(first), "renname"); //第三个方法是按钮名 } private void OnEnable() //继承自ScriptableWizard,当工具窗口第一次出现时被调用,也就是单击batch rename时调用 { UpdateSelectionHelper(); } private void OnSelectionChange() //当场景中选择发生改变时被调用 { UpdateSelectionHelper(); } void UpdateSelectionHelper() //使用helpstring显示选中对象个数信息 { helpString = ""; if(Selection.objects != null) { helpString = "number of objects selected:" + Selection.objects.Length; } } private void OnWizardCreate() { if (Selection.objects == null) return; //使用者输入起始数字 int PostFix = Startnumber; foreach(UnityEngine.Object o in Selection.objects) { o.name = Basename + PostFix; PostFix += Increment; } } }

制作2d角色需要精灵,图块集。精灵是覆盖在人物表面的,图块集是由多个图片组成的。



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3